## SoLoud::WavStream

The SoLoud::WavStream class represents a wave sound effect that is
streamed off disk while it's playing. The source files may be in various
RIFF WAV file formats, FLAC, MP3 or Ogg Vorbis files.

The sounds are loaded in pieces while they are playing, which takes more
processing power than playing samples from memory, but they require much
less memory.

For short or often used samples, you may want to use SoLoud::Wav
instead.

### WavStream.load()

The wav loader takes just one parameter, the file name:

    result load(const char *aFilename); // File to load

If loading fails, the function will return an error code.

    SoLoud::WavStream muzak;
    muzak.load("elevator.ogg");

If the loading function is called while there are instances playing, the
result is undefined (most likely a crash).

### WavStream.loadFile()

The loadFile() can be used to load audio from a SoLoud::File object. This
is useful for integrating with virtual filesystems / packfiles, such as
PhysFS.

\pagebreak


### WavStream.loadMem()

Alternate way of loading samples is to read from a memory buffer.

    result loadMem(unsigned char *aMem, int aLength, 
                   bool aCopy, bool aTakeOwnership);

If loading fails, the sample will be silent.

    SoLoud::WavStream boom;
    boom.loadMem(boomMemoryResource, boomMemoryResourceLength);

SoLoud function assumes that the pointer and the data pointed will
be valid as long as SoLoud needs them. You can use the aCopy parameter
to tell SoLoud to take a copy of the data instead of using the pointers
directly, and the aTakeOwnership parameter to tell SoLoud to free the
pointer when the object is being destroyed.

### WavStream.loadToMem()

The loadToMem() tells SoLoud to load the whole file to a memory buffer
and stream it from there. This is similar as to using the Wav object,
except that the data is not decoded to raw samples on load.

This can be useful if you expect the media the data resides on to be
slow or busy, but don't want to spend the memory for the completely
decoded audio data.

### WavStream.loadFileToMem()

The loadFileToMem() function performs the memory loading of loadToMem()
using SoLoud::File objects, same way as loadFile() does.

### WavStream.setLooping()

This function can be used to set the wav stream to loop.

    soundtrack.setLooping(1);
    
Calling this function will not affect "live" sound sources.


\pagebreak


### WavStream.setFilter()


As with any other audio source, you can attach filters to 
wav stream audio sources.

    gHipster.setFilter(0, &gLofi);

### WavStream.stop()


You can stop all instances of a wav stream sound source with
stop(). This is equivalent of calling soloud.stopAudioSource()
with the sound source.

    gHammertime.stop();

### WavStream.getLength()


The length, in seconds, of this wav stream can be queried with this
function.

    double t = gRecord.getLength();

### WavStream.setInaudibleBehavior()

Set the inaudible behavior of the sound. By default, if a sound is
inaudible, it's paused, and will resume when it becomes audible again.
With this function you can tell SoLoud to either kill the sound if
it becomes inaudible, or to keep ticking the sound even if it's 
inaudible.

	// Keep on talking even if I'm not around
	gSpeech.setInaudibleBehavior(true, false);

### WavStream.setVolume()

Set the default volume of the instances created from this audio source.

    gTinyVoice.setVolume(0.1);


### WavStream.setLoopPoint(), WavStream.getLoopPoint()

If looping is enabled, the loop point is, by default, the start of the
stream. The loop point can be changed, and current loop point can be
queried with these functions.

	double t = snd.getLoopPoint();
	snd.setLoopPoint(t + 1); // skip 1 second more when looping
	...
	snd.setLoopPoint(0); // loop from start
	

### Inherited 3d audio interfaces

Like all other audio sources, WavStream inherits the 3d audio interfaces. Please refer to the 3d audio chapter for details on:

- WavStream.set3dMinMaxDistance()
- WavStream.set3dAttenuation()
- WavStream.set3dDopplerFactor()
- WavStream.set3dProcessing()
- WavStream.set3dListenerRelative()
- WavStream.set3dDistanceDelay()
- WavStream.set3dCollider()
- WavStream.set3dAttenuator()
              